함수의 선언

우리가 흔히 사용하는 함수 = Function 객체의 인스턴스이다. 함수이름 = 함수 객체를 가리키는 포인터 이다. 따라서 오버로딩이 불가능하다.

1
2
3
4
5
6
// 함수선언
function sum(v1, v2) { return v1 + v2; }
// 함수 표현식
var sum = function(v1, v2) { return v1 + v2; }; // 마지막 ';'
// Funtion 객체 사용(권장X)
var sum = new Function("v1", "v2", "return v1 + v2");

함수 선언식은 코드 실행전에도, 모든 실행 컨텍스트에서 접근이 가능하다.

why? 함수 선언 호이스팅(끌어 올린다) 과정을 통해 실행 컨텍스트에 추가 되기 때문

그렇지만 함수 표현식은 코드실행전 까지 사용이 불가능하다.

1
2
alert(sum(10, 10)); // 에러
var sum = function(n1, v2) { return v1 + v2; }

특징

  • 함수는 값이다.

Javascript에서는 함수도 값이다. var a = function() {} = function a() {} 따라서 객체 안에 저장될 수 있다.(객체 안에 저장되면 메서드라고 불림)

  • 함수는 인자로 전달될 수 있다.

함수는 값이기 때문에 인자로 전달 될 수도 있음.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function calculator (func, num) {
return func(num);
}

function increase (num) {
return num + 1;
}

function decrease (num) {
return num - 1;
}

alert(calculator(increase, 1));
alert(calculator(decrease, 1));
  • 함수는 함수의 리턴값으로 사용될 수 있다.
1
2
3
4
5
6
7
8
9
10
function calculator (mode) {
var functions = {
'increase' : function(num) { return num+1 },
'decrease' : function(num) { return num-1 },
}
return functions.mode;
}

alert(calculator('increase')(1)); // 2
alert(calculator('decrease')(1)); // 0

calculator(‘increase’) = function increase(num) { return num+1 }

calculator(‘increase’)(1) = increase(1)

  • 함수는 배열의 값으로 사용될 수 있다
1
2
3
4
5
6
7
8
9
10
var calculator = [
function (num) { return num + 10; },
function (num) { return num * num; },
function (num) { return num / 10; }
];
var num = 1;
for (var i = 0; i < calculator.length; i++) {
num = calculator[i](num);
console.log(num); // 11, 121, 12.1
}

Reference

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array

프론트엔드 개발자를 위한 자바스크립트 프로그래밍 - 니콜라스 자카스